package com.orzxlee.InterviewQuestions.Frame;

public class Demo {
    public static void main(String[] args) {

        //1.SpringMVC 的工作原理
        /*
        1、  用户发送请求至前端控制器DispatcherServlet。

        2、  DispatcherServlet收到请求调用HandlerMapping处理器映射器。

        3、  处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找)，生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

        4、  DispatcherServlet调用HandlerAdapter处理器适配器。

        5、  HandlerAdapter经过适配调用具体的处理器(Controller，也叫后端控制器)。

        6、  Controller执行完成返回ModelAndView。

        7、  HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

        8、  DispatcherServlet将ModelAndView传给ViewResolver视图解析器。

        9、  ViewResolver解析后返回具体View。

        10、 DispatcherServlet根据View进行渲染视图（即将模型数据填充至视图中）。

        11、 DispatcherServlet响应用户。
         */

        //2. 常用注解
        /*
            @requestMapping 用于请求 url 映射。
            @RequestBody 注解实现接收 http 请求的 json 数据，将 json 数据转换为 java 对象。
            @ResponseBody 注解实现将 controller 方法返回对象转化为 json 响应给客户。
            @Required:该注解应用于设值方法
            @Autowired：该注解应用于有值设值方法、非设值方法、构造方法和变量。
            @Qualifier：该注解和@Autowired 搭配使用，用于消除特定 bean 自动装配的歧义

         */

        //3.如何开启注解处理器和适配器
        //springmvc.xml 中通过开启 <mvc:annotation-driven>
        //<context:annotation-config />

        //4.如何解决 get 和 post 乱码问题?
        /*
            post 请求乱码: web.xml文件中配置 CharacterEncodingFilter 过滤器 ,设置为 utf-8.
            get 请求乱码:
                1. 修改 tomcat 配置文件添加编码与工程编码一致。
                2. 对参数进行重新编码 String userName = new String(Request.getParameter(“userName”).getBytes(“ISO8859-1”), “utf-8”);

         */

        //5. Spring 理解
        /*
            控制反转（IOC）
                传统的 java 开发模式中，当需要一个对象时，我们会自己使用 new 或者 getInstance 等直接
                或者间接调用构造方法创建一个对象。而在 spring 开发模式中，spring 容器使用了工厂模式为我们创建了所需要的对
                象，不需要我们自己创建了，直接调用 spring 提供的对象就可以了，这是控制反转的思想。
            依赖注入（DI）
                spring 使用 javaBean 对象的 set 方法或者带参数的构造方法为我们在创建所需对象时将其属
                性自动设置所需要的值的过程，就是依赖注入的思想。
            面向切面编程（AOP）
                在面向对象编程（oop）思想中，我们将事物纵向抽成一个个的对象。而在面向切面编程
                中，我们将一个个的对象某些类似的方面横向抽成一个切面，对这个切面进行一些如权限控制、事物管理，记录日志等
                公用操作处理的过程就是面向切面编程的思想。AOP 底层是动态代理，如果是接口采用 JDK 动态代理，如果是类采用
                CGLIB 方式实现动态代理

         */

    }
}
